package com.cskaoyan.javase.oop2._1extends._9override._2notice;

/**
 * 方法的重写,父类中所有的方法都能重写吗?
 *  特殊方法:
 *       1.私有方法可以重写吗?
 *          不可以,虽然能够继承,但是没有访问权限,当然不能重写
 *
 *       2.静态方法可以重写吗?
 *          静态方法属于类,不算继承,更不能重写
 *          如果子类中没有父类同名静态方法,那么共用父类中的静态方法
 *          反之,各用各自的
 *
 *       3.构造器不能继承,更不能重写
 *
 * 小技巧:
 *     几种重写父类方法的方式:
 *     1.如果已经明确知道要重写父类的哪个方法,可以直接在子类中
 *          写父类的方法名,然后回车即可.(推荐)
 *
 *     2.如果没有明确要重写的方法,希望找一找看一看父类中有哪些方法能够重写
 *          那就使用快捷键"alt + insert"
 *
 * @since 10:51
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        Father.testStatic();
        Son.testStatic();
    }
}

class Father {
    private void test() {
    }

    public static void testStatic() {
        System.out.println("6666");
    }

    public void test2() {
    }
    public void test3() {
    }
    public void test4() {
    }
}

class Son extends Father {
    // Method does not override method from its superclass
    // @Override
    // public void test(){
    // }
    // @Override
    public static void testStatic() {
        System.out.println("7777");
    }

    @Override
    public void test2() {
        // 自己重写
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

    @Override
    public boolean equals(Object obj) {
        return super.equals(obj);
    }

    @Override
    public void test3() {
        super.test3();
    }

    @Override
    public void test4() {
        super.test4();
    }

    @Override
    public int hashCode() {
        return super.hashCode();
    }

    @Override
    public String toString() {
        return super.toString();
    }

    @Override
    protected void finalize() throws Throwable {
        super.finalize();
    }
}